package com.atguigu.lease.app.service.impl;

import com.atguigu.lease.app.mapper.SystemUserMapper;
import com.atguigu.lease.app.service.SystemUserService;
import com.atguigu.lease.model.bean.SystemUser;
import com.atguigu.lease.model.vo.system.SystemUserItemVo;
import com.atguigu.lease.model.vo.system.SystemUserQueryVo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
* @author 1
* @description 针对表【system_user(员工信息表)】的数据库操作Service实现
* @createDate 2025-06-20 14:04:43
*/
@Service
public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemUser>
    implements SystemUserService{

    @Override
    public Page<SystemUserItemVo> pageItem(Long current, Long size, SystemUserQueryVo queryVo) {
        //之前传入条件时，一直传入对象，在自定义sql时，手动获取对象中的条件 做非空判断，然后拼接条件使用！！
        //mp也支持 我们自定义的mapper方法 使用QueryWrapper对象 生成sql条件
        //1、创建QueryWrapper(不支持LambdaQueryWrapper)对象组装条件
        QueryWrapper queryWrapper = new QueryWrapper<>();
        // queryWrapper 只是一个生成 sql字符串的工具类，生成的sql 最终会拼接到mybatis mapper文件的sql中使用
        queryWrapper.eq("t1.is_deleted", 0 );
        queryWrapper.like(StringUtils.hasText(queryVo.getName()) , "t1.name" , queryVo.getName());
        queryWrapper.like(StringUtils.hasText(queryVo.getPhone()) , "t1.phone" , queryVo.getPhone());
        //2、自定义mapper方法传入 queryWrapper对象携带 自定义条件sql


        return baseMapper.selectSystemUserItemVoPage(new Page<SystemUserItemVo>(current,size),
                queryWrapper);
    }

    @Override
    public void saveOrUpdateSystemUser(SystemUser systemUser) {

        //对用户信息进行处理
        //1、密码加密
        if(StringUtils.hasText(systemUser.getPassword())){
            //如果传入了密码 进行加密
            //MD5加密： 不可逆加密， 相同明文加密的结果一样 ， 生成的是唯一的固定长度的字符串(32或者64)，出现碰撞的概率低！！
            //缺点： 可以被暴力破解(彩虹表：将常用的密码 MD5的加密结果都缓存了，使用数据库加密的密码进行匹配 反过来找明文)
            systemUser.setPassword(DigestUtils.md5Hex(systemUser.getPassword()));
        }
        //2、设置默认值：
        //默认头像地址
        if(StringUtils.isEmpty(systemUser.getAvatarUrl())){
            systemUser.setAvatarUrl("https://himg.bdimg.com/sys/portraitn/item/public.1.d37fa0e0.uQH2F_v2AzUdAh1Amd3lgg?_d=29180319");
        }

        //设置默认状态: 1-可用 其他不可用
        systemUser.setStatus(1);

        //保存或更新用户信息
        this.saveOrUpdate(systemUser);

    }

    public static void main(String[] args) {
        String encodPwd = DigestUtils.md5Hex("123456");
        System.out.println("encodPwd1 = " + encodPwd);
        encodPwd = DigestUtils.md5Hex("223456");
        System.out.println("encodPwd2 = " + encodPwd);
        encodPwd = DigestUtils.md5Hex("123456");
        System.out.println("encodPwd3 = " + encodPwd);
    }
}




